package com.hqq.exercise.list;

/**
 * DeleteLinkedListNode 在O(1)时间删除链表节点
 * 题目描述:
 * 给定单向链表的头指针和一个结点指针 定义一个函数在O(1)时间删除该节点
 * Created by heqianqian on 2017/8/10.
 */
public class DeleteLinkedListNode {

    public static void deleteNode(ListNode head, ListNode delNode) {
        if (head == null || delNode == null) {
            throw new RuntimeException("参数不正确!");
        }
        if (head == delNode) {//要删除的是头结点
            head = null;
        } else {
            if (delNode.next == null) {//要删除的是尾节点
                ListNode node = head;
                while (node.next.next != null) {
                    node = node.next;
                }
                node.next = null;
            } else {//将要删除的节点的值设置为下一个节点的值 删除下一个节点
                delNode.data = delNode.next.data;
                delNode.next = delNode.next.next;
            }
        }
    }
}
